package ar.com.jsejtman.cajugastos2.core.controller;

import ar.com.jsejtman.cajugastos2.core.entity.Empresa;
import ar.com.jsejtman.cajugastos2.core.view.data.ValidatedResponse;
import ar.com.jsejtman.common.service.data.DataPage;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

/**
 * Controller que responde a las acciones de las pantallas de búsquedas de empresas.
 * 
 * @author Pablo Lamas
 */
//@Controller
public class BusquedaEmpresaController {
	/* CHECKSTYLE:OFF */

	/**
	 * Logger del controller.
	 */
//	private static final Logger LOG = LoggerFactory.getLogger(BusquedaEmpresaController.class);

	/**
	 * Servicio de validación de formularios.
	 */
//	@Autowired
//	private IValidatorService validatorService;

	/**
	 * Fuente de mensajes localizados de Spring.
	 */
//	@Autowired
//	private MessageSource messageSource;

	/**
	 * Validador de búsquedas de empresas.
	 */
//	@Autowired(name = "BusquedaEmpresaValidator")
//	private Validator busquedaEmpresaValidator;

	/**
	 * Método que carga la página de Búsqueda de Empresa.
	 * 
	 * @param model Modelo de la vista.
	 * @return ModelAndView de la vista.
	 */
	@RequestMapping(value = "/busquedaCodigoArea", method = RequestMethod.GET)
	public final ModelAndView initBusquedaDireccion(final HttpServletRequest req, final ModelMap model) {

		
		System.out.println("Parameters");
		List<String> requestParameterNames = new ArrayList<String>();
//				Collections.list((Enumeration<String>)req.getParameterNames());
	    for ( String parameterName:requestParameterNames){
	    	System.out.println(parameterName + " - " + req.getParameter(parameterName));
	    }
		System.out.println();
//		System.out.println("Attreibutes");
//		requestParameterNames = Collections.list((Enumeration<String>)req.getAttributeNames());
//	    for ( String parameterName:requestParameterNames){
//	    	System.out.println(parameterName + " - " + req.getAttribute(parameterName));
//	    }
		return (new ModelAndView("busqueda-empresa"));
	}

	/**
	 * Realiza una búsqueda de una empresa.
	 * 
	 * @param searchForm El DTO del formulario de búsqueda.
	 * @return Resultados de la búsqueda.
	 */
	@RequestMapping(value = "/busquedaEmpresa/execute", method = RequestMethod.POST)
	@ResponseBody
	public final ValidatedResponse<DataPage<Empresa>> getEmpresasBySpecificSearchCriteria() {

		final ValidatedResponse<DataPage<Empresa>> validatedResponse =
		        new ValidatedResponse<DataPage<Empresa>>();

//		this.validatorService
//		        .validate(this.busquedaEmpresaValidator, searchForm, validatedResponse);
//
//		try {
//			if (!validatedResponse.containsErrors()) {
//				/* No hay errores de validación; procede con la búsqueda */
//				final DefaultPaginationRequest paginationRequest = new DefaultPaginationRequest();
//				paginationRequest.setSortCriterion(new SortCriterion("cuit",
//				        SortDirection.ASCENDING));
//
//				validatedResponse.setContent(this.empresaService.getEmpresasByCuitAndRazonSocial(
//				        this.removeDashes(searchForm.getCuit()), searchForm.getRazonSocial(),
//				        paginationRequest));
//			}
//
//		} catch (final EntitySearchException e) {
//			this.processSearchException(searchForm, new DefaultPaginationRequest(),
//			        validatedResponse, e);
//		}

		return (validatedResponse);
	}

//	/**
//	 * Remueve los guiones del cuit.
//	 * 
//	 * @param cuit el cuit al cual se le quieren retirar los guiones.
//	 * @return El cuit sin guiones
//	 */
//	private String removeDashes(final String cuit) {
//
//		return cuit.replace("-", "");
//	}

//	/**
//	 * Cambia de página en una búsqueda de una empresa.
//	 * 
//	 * @param searchForm El DTO del formulario de búsqueda.
//	 * @param paginationRequest El criterio de paginación a utilizar.
//	 * @return Nueva página de resultados.
//	 */
//	@RequestMapping(value = "/busquedaEmpresa/execute", method = RequestMethod.GET)
//	@ResponseBody
//	public final ValidatedResponse<DataPage<Empresa>>
//	        changePageForEmpresasBySpecificSearchCriteria(
//	                @ModelAttribute final BuscarEmpresaDto searchForm,
//	                @ModelAttribute final FlexigridPaginationRequest paginationRequest) {
//
//		final ValidatedResponse<DataPage<Empresa>> validatedResponse =
//		        new ValidatedResponse<DataPage<Empresa>>();
//
//		try {
//			/* Pagina resultados sin validar el formulario ya que se siguen usando criterios válidos */
//			validatedResponse.setContent(this.empresaService.getEmpresasByCuitAndRazonSocial(
//			        searchForm.getCuit(), searchForm.getRazonSocial(), paginationRequest));
//
//		} catch (final EntitySearchException e) {
//			this.processSearchException(searchForm, paginationRequest, validatedResponse, e);
//		}
//
//		return (validatedResponse);
//	}
//
//	/**
//	 * Procesa una excepción en una búsqueda, e informa la situación al usuario.
//	 * 
//	 * @param searchForm Formulario de búsqueda.
//	 * @param paginationRequest Solicitud de paginación.
//	 * @param validationResultsContainer Contenedor de errores de validación.
//	 * @param exception Excepción de búsqueda atrapada.
//	 */
//	private void processSearchException(final Object searchForm,
//	        final IPaginationRequest paginationRequest,
//	        final IValidationResultsContainer validationResultsContainer,
//	        final EntitySearchException exception) {
//
//		BusquedaEmpresaController.LOG.error("Hubo un error al realizar una búsqueda de empresas: "
//		        + exception.getMessage(), exception);
//		BusquedaEmpresaController.LOG.error("Criterios de búsqueda usados: " + searchForm);
//		BusquedaEmpresaController.LOG.error("Condiciones de paginación requeridas: "
//		        + paginationRequest);
//
//		final String errorMessage =
//		        this.messageSource.getMessage("message.generalError", new Object[0],
//		                LocaleContextHolder.getLocale()) + exception.getLocalizedMessage();
//
//		validationResultsContainer.addGeneralValidationMessage(errorMessage);
//	}
	/* CHECKSTYLE:ON */

}
